package studentinformationmanagementsystem.service.impl;

import studentinformationmanagementsystem.dao.CourseDao;
import studentinformationmanagementsystem.dao.TeachersSchedulesDao;
import studentinformationmanagementsystem.dao.TemporaryClassTableDao;
import studentinformationmanagementsystem.dao.impl.CourseDaolmpl;
import studentinformationmanagementsystem.dao.impl.TeachersSchedulesDaolmpl;
import studentinformationmanagementsystem.dao.impl.TemporaryClassTableDaolmpl;
import studentinformationmanagementsystem.entity.*;
import studentinformationmanagementsystem.service.CourseService;

import java.util.List;

/**
 * @author 苗庆
 * @version 1.0
 */
public class CourseServicelmpl implements CourseService {
    CourseDao courseDao=new CourseDaolmpl();


    /**
     * 添加课程信息
     * @param course
     */
    @Override
    public int register(Course course) {
        course.setIsDelete(0);
        return courseDao.insert(course);
    }


    /**
     *  根据ID更新课程信息
     * @param course  课程对象
     * @return 受影响的记录行数
     */
    @Override
    public int update(Course course) {
        return courseDao.update(course);
    }


    /**
     *  根据ID删除课程
     * @param course 课程ID
     * @return 受影响的记录行数
     *
     * 逻辑思路：
     * 1.使用要删除的信息来查询课程信息，获取这个课程信息，修改其是否修改标志
     * 2.是否有课程id查询教师任课表，将此条信息修改其标志
     * 3.选课临时表包含教师任课表的id，将此条信息修改其标志
     *
     * 4.删除学生选课表  如果是选修类型的课就去删学生选课表
     * 5.学生必修课表    如果是必修课表就删除学生必修课表
     * 6.学生课表
     */
    @Override
    public int delete(Course course) {
        Course course1 = queryById(course);
        course1.setIsDelete(1);

        //* 2.是否有课程id查询教师任课表，将此条信息修改其标志
        TeachersSchedulesDao teachersSchedulesDao = new TeachersSchedulesDaolmpl();
        TeachersSchedules teachersSchedules = new TeachersSchedules();
        teachersSchedules.setCourseid(course1.getCourseid());
        List<TeachersSchedules> teachersSchedules1 = teachersSchedulesDao.queryBycourseid01(teachersSchedules);

        for (TeachersSchedules teachersSchedules2:teachersSchedules1) {

            //修改其标志
            teachersSchedules2.setTeacherid(1);
            int update = teachersSchedulesDao.update(teachersSchedules2);

            // * 3.选课临时表包含教师任课表的id，将此条信息修改其标志
            TemporaryClassTable temporaryClassTable = new TemporaryClassTable();
            temporaryClassTable.setTeachersschedulesid(teachersSchedules2.getTeachersschedulesid());
            TemporaryClassTableDaolmpl temporaryClassTableDaolmpl = new TemporaryClassTableDaolmpl();
            TemporaryClassTable temporaryClassTable1 = temporaryClassTableDaolmpl.queryByTeachersschedulesid(temporaryClassTable);

            if (temporaryClassTable1!=null){
                temporaryClassTable1.setIsDelete(1);
                int update1 = temporaryClassTableDaolmpl.update(temporaryClassTable1);
            }

        }
        int update = update(course1);
        return update;
    }


    /**
     * 查询所有课程信息
     * @return 所有课程信息
     */
    @Override
    public List<Course> queryAll() {
        Course course = new Course();
        course.setIsDelete(0);
        return courseDao.queryAll(course);
    }


    /**
     * 根据课程ID查询课程信息
     * @param course 课程ID
     * @return 课程信息
     */
    @Override
    public Course queryById(Course course) {
        return courseDao.queryById(course);
    }

    /**
     * 分页查询
     * @param pageNo  查询页码
     * @param pageSize  每页的记录数
     * @return
     */
    @Override
    public Page<Course> page(int pageNo, int pageSize) {
        /**
         * 当前页码:pageNo
         * 总页码:pageTotal
         * 当前页显示的数量:pageSize
         * 总记录数:pageTotalCount
         * 当前页数据:items
         */

        //访问页面的记录条数的开始行数：当前页码-1*每页展示的记录行数
        int bigin=(pageNo-1)*pageSize;


        //总记录数量
        Integer pageTotalCount=courseDao.queryForPageTotalCount();

        //总页码数量=总记录数/每页记录显示数量，然后判断是否可以被除尽，如果不能除尽，那么总的页码数量就需要+1
        Integer pageTotal=pageTotalCount/pageSize;

        if (pageTotalCount%pageSize!=0){
            pageTotal++;
        }


        //当前页码数据
        List<Course> items = courseDao.queryForPageItems(bigin, pageSize);

        Page<Course> objectPage = new Page<Course>(pageNo,pageTotal,pageSize,pageTotalCount,items);

        return objectPage;
    }



    /**
     * 检查课程名称是否已存在
     * @param course
     * @return true 课程名称已存在
     */
    @Override
    public boolean isExistsByCourseNname(Course course) {

        boolean falg=false;

        Course course1 = courseDao.queryByCourseNname(course);

        if (course1!=null){
            falg=true;
        }

        return falg;
    }

    @Override
    public boolean isExistsByNumber(Course course) {
        boolean falg1=false;
        Course course1 = courseDao.queryByNumber(course);
        if (course1!=null){
            falg1=true;
        }
        return falg1;
    }

    @Override
    public Integer queryCoureCount() {
        return courseDao.queryForPageTotalCount();
    }


}
